////////////////////////////////////////////////////////////////////////////////

#ifndef _SBULLET_H_
#define _SBULLET_H_

////////////////////////////////////////////////////////////////////////////////

#ifndef _SGAMEOBJECT_H_
#include "sgameobject.h"
#endif

#include <list>

////////////////////////////////////////////////////////////////////////////////


/** Base class for all bullets
*
*  @author   Roman Pasechnik
*  @author   Anastasia Karpinska
*  @since    Nov 07th, 2009
*  @updated  Dec 09th, 2009
*/
class SBullet : public SGameObject
{
////////////////////////////////////////////////////////////////////////////////

public:

////////////////////////////////////////////////////////////////////////////////


    /** Constructor */
    SBullet( int _ID, int _playerID );


    /** Destructor */
    virtual ~SBullet();


////////////////////////////////////////////////////////////////////////////////


    /** Gets damage of the bullet */
    size_t GetDamage() const;


    /** Sets damage of the bullet */
    void SetDamage( size_t _damage );


////////////////////////////////////////////////////////////////////////////////


    /** Returns player's ID */
    int GetPlayerID() const;


////////////////////////////////////////////////////////////////////////////////

private:

////////////////////////////////////////////////////////////////////////////////


    /** Bullet's damage */
    size_t m_Damage;


    /** Player's ID */
    int m_PlayerID;


////////////////////////////////////////////////////////////////////////////////
//// Collisions
////////////////////////////////////////////////////////////////////////////////


    /** Informs this object about collision with other object */
    virtual void Collision( PhysicalObject& _obj );


    /** Informs this object about collision with player */
    virtual void CollideWithPlayer( SPlayer& _player );


////////////////////////////////////////////////////////////////////////////////
};


/** [Utility type]: List of server bullets */
typedef std::list<SBullet> SBulletsList;


////////////////////////////////////////////////////////////////////////////////

#endif

////////////////////////////////////////////////////////////////////////////////

